package com.foreveross.proxyip.infra.utils.param;


import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.foreveross.proxyip.infra.utils.StringUtils;

/**
 * 获得布尔类型参数值
 * @author xiangsf
 * @version $Revision$ $Date$
 * @since 0.5
 */
public class ParamBooleanUtils {
	/**
     * 获得页面请求中的布尔值
     * <p>如果获得的值为空，则返回null</p>
     * @param request
     * @param name 参数名称
     * @return 值为false、off、0时返回false, 否则返回true
     */
    public static Boolean getParameter(HttpServletRequest request, String name){
    	String temp = request.getParameter(name);
    	if(StringUtils.isNotEmpty(temp)){
	    	if ("false".equals(temp) || "off".equals(temp) || "0".equals(temp)) {
	            return false;
	        }else{
	        	return true;
	        }
    	}
    	return null;
    }    
    /**
     * 获得页面请求中的布尔值
     * <p>如果获得的值为空时，则返回传入的defaultValue值</p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认返回值
     * @return 值为false、off、0时返回false, 否则返回true
     */
    public static Boolean getParameter(HttpServletRequest request, String name, boolean defaultValue){
    	String temp = request.getParameter(name);
    	if(StringUtils.isNotEmpty(temp)){
    		if ("false".equals(temp) || "off".equals(temp) || "0".equals(temp)) {
	            return false;
	        }else{
	        	return true;
	        }
    	}
    	return defaultValue;
    }
    /**
     * 获得页面请求中的布尔值
     * <p>如果获得的值为空时，则返回传入的defaultValue值</p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认返回值
     * @return 值为false、off、0时返回false, 否则返回true
     */
    public static Boolean getParameter(Map<String, String> params, String name, boolean defaultValue){
    	String temp = params.get(name);
    	if(StringUtils.isNotEmpty(temp)){
    		if ("false".equals(temp) || "off".equals(temp) || "0".equals(temp)) {
	            return false;
	        }else{
	        	return true;
	        }
    	}
    	return defaultValue;
    }
    /**
     * 获得页面请求中的布尔值集合
     * <p>
     * 如果没有该参数值对象，将返回一个长度为0的布尔型数组；
     * 当获得的值为空时，则该值为传入的defaultValue值
     * </p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认值
     * @return 返回布尔数组
     */
    public static Boolean[] getParameters(HttpServletRequest request, String name, boolean defaultValue){
    	List<Boolean> values = getListParameters(request,name, defaultValue) ;
    	return (Boolean[])values.toArray(new Boolean[]{});
    }
    /**
     * 获得页面请求中的布尔值集合
     * <p>
     * 如果没有该参数值对象，将返回一个长度为0的布尔型list集合；
     * 当获得的值为空时，则该值为传入的defaultValue值
     * </p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认值
     * @return 返回布尔型list集合
     */
    public static List<Boolean> getListParameters(HttpServletRequest request, String name, boolean defaultValue){
    	List<Boolean> values = new ArrayList<Boolean>();
    	String[] temp = request.getParameterValues(name);
    	if(temp != null && temp.length > 0){
    		for(int i = 0 ;i < temp.length; i++){
    			if(StringUtils.isNotEmpty(temp[i])){
    				if ("false".equals(temp[i]) || "off".equals(temp[i]) || "0".equals(temp[i])) {
    					values.add(false);
    		        }else{
    		        	values.add(true);
    		        }
    	    	}else{
    	    		values.add(defaultValue);
    	    	}
    		}
    	}
    	return values;
    }
    /**
     * 获得页面请求中的布尔值集合
     * <p>
     * 如果没有该参数值对象，将返回一个长度为0的布尔型数组；
     * 当获得的值为空时，则该值为传入的defaultValue值
     * </p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认值
     * @return 返回布尔数组
     */
    public static Boolean[] getParametersStartWith(HttpServletRequest request, String namePrefix, boolean defaultValue){
    	List<Boolean> values = getListParametersStartWith(request, namePrefix, defaultValue);
    	return (Boolean[])values.toArray(new Boolean[]{});
    }
    /**
     * 获得页面请求中的布尔值集合
     * <p>
     * 如果没有该参数值对象，将返回一个长度为0的布尔型list集合；
     * 当获得的值为空时，则该值为传入的defaultValue值
     * </p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认值
     * @return 返回布尔list集合
     */
    public static List<Boolean> getListParametersStartWith(HttpServletRequest request, String namePrefix, boolean defaultValue){
    	List<Boolean> values = new ArrayList<Boolean>();
    	Map<String,String[]> paras = request.getParameterMap();
    	String tempKey = null;
    	String[] temp = null;
    	for(Iterator<String> names = paras.keySet().iterator(); names.hasNext();){
    		tempKey = names.next();
    		if(tempKey.startsWith(namePrefix)){//以指定的字符串开头
    			temp = paras.get(tempKey);
    			if(temp != null && temp.length > 0){
	    			if ("false".equals(temp[0]) || "off".equals(temp[0]) || "0".equals(temp[0])) {
	    				values.add(false);
			        }else{
			        	values.add(true);
			        }
    			}else{
    				values.add(defaultValue);
    			}
    		}
    	}
    	return values;
    }
}
